商类型将某一类型的命题等价关系变粗,使得由某个等价关系关联的项被视为相等。该等价关系由Setoid
的一个实例给出。
从集合论的角度来看,Quotient s
可以被看作是α
在Setoid
实例的关系s.r
下的等价类的集合。
来自Quotient s
的函数必须证明它们满足s.r
:
-
定义一个函数
f : Quotient s → β
, -
提供
f' : α → β
-
并证明对于所有
x : α
和y : α
,有s.r x y → f' x = f' y
。Quotient.lift
实现了这个操作。
主要的商操作符包括:
-
Quotient.mk
将底层类型α
的元素放入商类型中。 -
Quotient.lift
允许从商类型定义到另一个类型的函数。 -
Quotient.sound
断言由r
关联的元素相等。 -
Quotient.ind
用于在证明商类型时假设所有元素都是通过Quotient.mk
构造的。
Quotient
构建在原始商类型Quot
之上,后者不需要关系是等价关系的证明。对于确实为等价关系的场景,应使用Quotient
而非Quot
。